package com.cskaoyan.javase.array._2memory;

/**
 * 分别静态、动态初始化两个数组，分别输出数组名及元素。然后分别给数组中的元素赋值，再次分别输出数组名及元素。
 *
 * 在Java当中，只要看到new关键字，那么就表示一定要在堆上创建一个新的对象
 * 而不同的对象之间是没有互不影响的，它们的引用中存储的地址肯定也是不同的。
 *
 * @since 11:45
 * @author wuguidong@cskaoyan.onaliyun.com
 */
public class Demo5 {
    public static void main(String[] args) {
        // int[] arr = new int[]{1, 2, 3};
        // 静态初始化的简写,实际上也存在new关键字,表示在堆上创建对象
        int[] arr = {1, 2, 3};
        int[] arr2 = new int[3];
        System.out.println(arr);
        System.out.println(arr2);

        /*
            比较运算符"=="以及"!="是可以用来连接引用数据类型的引用的
            这时比较的就是引用中存储的地址
            要注意用"=="比较两个引用数据类型的相等
            它们相等的条件是很苛刻的
            只有当引用中存储的地址完全相等时才会返回true
            也就是说只有当两个引用指向同一个对象时,才会返回true

            注意事项:
            "=="或者"!="连接引用数据类型的引用
            不是任意两个引用都能连接的
            要求左边两边的引用是同一种类型(后面会学习不是同一种类型也能连接)
         */
        System.out.println(arr == arr2);

        // 把arr的地址赋值给arr3,相当于它们指向同一个对象
        int[] arr3 = arr;
        System.out.println(arr == arr3);

        double[] arr4 = new double[3];
        // System.out.println(arr == arr4);
        arr[0] = 666;
        System.out.println(arr3[0]);
    }
}
